package com.sunni.service.Impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sunni.entity.PageListRes;
import com.sunni.entity.Permission;
import com.sunni.entity.QueryVo;
import com.sunni.entity.Role;
import com.sunni.mapper.RoleMapper;
import com.sunni.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleMapper roleMapper;

    @Override
    public PageListRes selectAllRoles(QueryVo queryVo) {
        PageListRes pageListRes = new PageListRes();


        /*设置 pageBean*/
        Page<Object> page = PageHelper.startPage(queryVo.getPage(), queryVo.getRows());
        /*获取 所有role*/
        List<Role> roleList = roleMapper.selectAll(queryVo);

        pageListRes.setTotal(page.getTotal());
        pageListRes.setRows(roleList);

        return pageListRes;
    }

    /*添加 role角色&对应权限*/
    @Override
    public void addRoleAndRolePermissionRel(Role role) {
        
        /*1.保存 角色 (往role表 insert)*/
        roleMapper.insert(role);
        /*1.1 在 insert方法里添加属性：useGeneratedKeys="true" keyProperty="rid"  */
        /*1.2 两个属性表示：如果添加成功，把添加进去role，它在数据库的rid返回回来*/
        /*1.3 rid用在role_permission_rel表的添加（不写的话 下面的方法执行会报错取不到rid）*/
        
        /*2. 保存 角色--权限 （往role_permission_rel表 insert）*/
        for (Permission permission : role.getPermissionList()) {
            roleMapper.insertRoleAndPermission(role.getRid(),permission.getPid());
        }
    }

    /*角色管理，编辑按钮，修改角色*/
    @Override
    public void updateRoleAndRolePermissionRel(Role role) {

        /*0.更新role表，rnum、rname*/
        roleMapper.updateByPrimaryKey(role);

        /*1.删除role_permission_rel表的数据 （两张表关联的关系）*/
        roleMapper.deleteRolePermissionRel(role);


        /*2.重新添加关系*/
        if (role.getPermissionList()!=null && role.getPermissionList().size()>0) {
            for (Permission permission : role.getPermissionList()) {
                roleMapper.insertRolePermissionRel(role.getRid(),permission.getPid());
            }
        }

    }

    /*角色管理，删除按钮，删除角色*/
    @Override
    public void deleteRoleAndRolePermissionRel(Long rid) {

        /*1. 先删除  role_permission_rel 的关系*/
        roleMapper.deleteRolePermissionRel(rid);

        /* 2.再删除 role表的角色*/
        roleMapper.deleteByPrimaryKey(rid);
    }

    /*查询所有role------来自employee.jsp dialog form的 角色下拉框*/
    @Override
    public List<Role> selectAllRoles() {
        return roleMapper.selectAll(null);
    }

}
